package leecode

func maximumSubarraySum(nums []int, k int) int64 {
	//滑动窗口
	left := 0
	hashMap := make(map[int]int) //记录窗口内的元素是否出现过
	sum := 0
	result := 0
	for right := 0; right < len(nums); right++ {
		sum += nums[right]
		hashMap[nums[right]]++
		//如果窗口内出现了重复元素 , 收缩窗口
		for hashMap[nums[right]] > 1 {
			hashMap[nums[left]]--
			sum = sum - nums[left]
			left++
		}
		//如果窗口长度超过k,收缩窗口
		for right-left+1 > k {
			hashMap[nums[left]]--
			sum = sum - nums[left]
			left++
		}
		//当窗口长度为K时 , 更新最终结果
		if right-left+1 == k {
			result = max(result, sum)
		}

	}
	return int64(result)
}
